package cn.cool.logic;

import cn.cool.common.CdDropdownItem;
import cn.cool.common.CdResult;
import cn.cool.config.CdConfigSetting;

import java.util.List;

public interface CdLogicInterface {

    /**
     * 初始化数据
     */
    void initSettingData();

    /**
     * 初始化指定文件的数据
     *
     * @param configSet 配置信息
     */
    void initSettingData(CdConfigSetting configSet);

    /**
     * 获取所有数据
     *
     * @return 返回结果
     */
    CdResult getAllData();

    /**
     * 获取所有命名空间数据
     *
     * @return 返回结果
     */
    CdResult getAllNameSpaceData();

    /**
     * 获取所有类型数据
     *
     * @param nameSpace 命名空间
     * @return 返回结果
     */
    CdResult getAllTypeData(String nameSpace);

    /**
     * 获取命名空间类型下所有值数据
     *
     * @param nameSpace 命名空间
     * @param type 类型
     * @return 返回结果
     */
    CdResult getAllTypeKeyData(String nameSpace, String type);

    /**
     * 获取命名空间类型下具体key键的数据值
     *
     * @param nameSpace 命名空间
     * @param type 类型
     * @param key 键
     * @return 返回结果
     */
    CdResult getKeyValueData(String nameSpace, String type, String key);

    /**
     * 获取命名空间类型的下拉项数据 (获取命名空间类型下具体key键的数据值)
     *
     * @param nameSpace 命名空间
     * @param type 类型
     * @return 返回结果
     */
    List<CdDropdownItem> getDropDownListData(String nameSpace, String type);

    /**
     * 获取命名空间类型包含首项的下拉项数据 (获取命名空间类型下具体key键的数据值)
     *
     * @param nameSpace 命名空间
     * @param type 类型
     * @return 返回结果
     */
    List<CdDropdownItem> getDropDownListTopEmptyData(String nameSpace, String type);

    /**
     * 获取命名空间数据个数
     *
     * @return 返回结果
     */
    int getNameSpaceCount();

    /**
     * 获取命名空间下类型个数
     *
     * @param nameSpace 命名空间
     * @return 返回结果
     */
    int getTypeCount(String nameSpace);

    /**
     * 获取命名空间下类型的key个数
     *
     * @param nameSpace 命名空间
     * @param type 类型
     * @return 返回结果
     */
    int getTypeKeyCount(String nameSpace, String type);

}
